Node.js MySQL Join

Node.js MySQL

দুই বা ততোধিক টেবিল যোগদান

দুই বা ততোধিক টেবিলের সারি তাদের মধ্যে সংশ্লিষ্ট কলামের উপর ভিত্তি করে JOIN বিবৃতি ব্যবহার করে যোগদান করা যেতে পারে।

ধরে নিন আপনার একটি "ব্যবহারকারী" টেবিল এবং একটি "পণ্য" টেবিল রয়েছে:

ব্যবহারকারীদের টেবিল

[
  { id: 1, name: 'John', favorite_product: 154},
  { id: 2, name: 'Peter', favorite_product: 154},
  { id: 3, name: 'Amy', favorite_product: 155},
  { id: 4, name: 'Hannah', favorite_product: null},
  { id: 5, name: 'Michael', favorite_product: null}
]

পণ্য টেবিল

[
  { id: 154, name: 'Chocolate Heaven' },
  { id: 155, name: 'Tasty Lemons' },
  { id: 156, name: 'Vanilla Dreams' }
]

এই দুটি টেবিল ব্যবহারকারীদের প্রিয়_ পণ্য ক্ষেত্র এবং পণ্যের আইডি ক্ষেত্র ব্যবহার করে যোগদান করা যেতে পারে।

উদাহরণ

উভয় টেবিলে মিলে যাওয়া রেকর্ড নির্বাচন করুন:

let mysql = require('mysql');

let con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

con.connect(function(err) {
  if (err) throw err;
  let sql = "SELECT users.name AS user, products.name AS favorite FROM users JOIN products ON users.favorite_product = products.id";
  con.query(sql, function (err, result) {
    if (err) throw err;
    console.log(result);
  });
});

দ্রষ্টব্য: JOIN এর পরিবর্তে INNER JOIN ব্যবহার করা যেতে পারে। উভয়ই আপনাকে একই ফলাফল দেবে।

উপরের কোডটি "demo_db_join.js" ফাইলে সংরক্ষণ করুন এবং ফাইলটি চালান:

C:\Users\Your Name>node demo_db_join.js

এটি আপনাকে এই ফলাফল দেবে:

[
  { user: 'John', favorite: 'Chocolate Heaven' },
  { user: 'Peter', favorite: 'Chocolate Heaven' },
  { user: 'Amy', favorite: 'Tasty Lemons' }
]

উপরের ফলাফল থেকে আপনি দেখতে পাচ্ছেন, শুধুমাত্র উভয় টেবিলে মিলে যাওয়া রেকর্ডগুলি ফেরত দেওয়া হয়েছে।

💡যোগ দিন মূল পয়েন্ট:

  • INNER JOIN:শুধুমাত্র উভয় টেবিলে মিলে যাওয়া রেকর্ড
  • যোগাযোগ:ON বিবৃতি একটি যোগদানের শর্ত উল্লেখ করে
  • উপনাম:কলামের নাম AS দ্বারা পরিবর্তন করা যেতে পারে
  • একাধিক টেবিল:একাধিক টেবিল যোগদান করা যেতে পারে

Left Join

আপনি যদি সমস্ত ব্যবহারকারীকে ফেরত দিতে চান, তাদের পছন্দের পণ্য থাকুক বা না থাকুক, বাম যোগদান বিবৃতিটি ব্যবহার করুন:

উদাহরণ

সমস্ত ব্যবহারকারী এবং তাদের প্রিয় পণ্য নির্বাচন করুন:

SELECT users.name AS user,
products.name AS favorite
FROM users
LEFT JOIN products ON users.favorite_product = products.id

এটি আপনাকে এই ফলাফল দেবে:

[
  { user: 'John', favorite: 'Chocolate Heaven' },
  { user: 'Peter', favorite: 'Chocolate Heaven' },
  { user: 'Amy', favorite: 'Tasty Lemons' },
  { user: 'Hannah', favorite: null },
  { user: 'Michael', favorite: null }
]

LEFT JOIN

বাম টেবিলের সব রেকর্ড + ডান টেবিলের রেকর্ড

  • প্রথম টেবিলের সব সারি
  • দ্বিতীয় টেবিলে সারি মিলছে
  • মেলে না যে কোনোটি NULL হবে

Right Join

আপনি যদি সমস্ত পণ্য এবং ব্যবহারকারীদের যারা তাদের পছন্দ করেছেন তাদের ফেরত দিতে চান, এমনকি ব্যবহারকারীদের মধ্যে কেউ তাদের পছন্দ না করলেও, ডান যোগদানের বিবৃতিটি ব্যবহার করুন:

উদাহরণ

সমস্ত পণ্য এবং ব্যবহারকারীদের যারা তাদের পছন্দ করেছে নির্বাচন করুন:

SELECT users.name AS user,
products.name AS favorite
FROM users
RIGHT JOIN products ON users.favorite_product = products.id

এটি আপনাকে এই ফলাফল দেবে:

[
  { user: 'John', favorite: 'Chocolate Heaven' },
  { user: 'Peter', favorite: 'Chocolate Heaven' },
  { user: 'Amy', favorite: 'Tasty Lemons' },
  { user: null, favorite: 'Vanilla Dreams' }
]

দ্রষ্টব্য: হান্না এবং মাইকেল, যাদের পছন্দের পণ্য ছিল না, তাদের ফলাফলে অন্তর্ভুক্ত করা হয়নি।

RIGHT JOIN

ডান টেবিলের সমস্ত রেকর্ড + বাম টেবিলের মিলিত রেকর্ড

  • দ্বিতীয় টেবিলের সব সারি
  • প্রথম টেবিলে সারি মিলছে
  • মেলে না যে কোনোটি NULL হবে

JOIN প্রকারের তুলনা

যোগ দিন টাইপ ব্যাখ্যা মানচিত্র আবেদন
INNER JOIN শুধুমাত্র উভয় টেবিলে মিলে যাওয়া রেকর্ড ক্রস অধ্যায় যখন শুধুমাত্র প্রাসঙ্গিক ডেটা প্রয়োজন হয়
LEFT JOIN বাম টেবিলের সব রেকর্ড + ডান টেবিলের রেকর্ড বাম ভেন্ট্রিকল যখন মাস্টার টেবিলের সমস্ত রেকর্ড প্রয়োজন হয়
RIGHT JOIN ডান টেবিলের সমস্ত রেকর্ড + বাম টেবিলের মিলিত রেকর্ড ডান ভেন্ট্রিকল যখন দ্বিতীয় তফসিলের সমস্ত রেকর্ড প্রয়োজন
FULL OUTER JOIN দুটি টেবিলের সমস্ত রেকর্ড (মাইএসকিউএলে নয়) পুরো ইউনিয়ন যখন দুটি টেবিলের সমস্ত ডেটা প্রয়োজন হয়

অ্যাডভান্সড জয়েন উদাহরণ

তিনটি টেবিলের সমন্বয়

// Join three tables: users, orders, products
let sql = `
  SELECT 
    users.name AS customer,
    products.name AS product,
    orders.quantity,
    orders.order_date
  FROM users
  INNER JOIN orders ON users.id = orders.user_id
  INNER JOIN products ON orders.product_id = products.id
  ORDER BY orders.order_date DESC
`;

con.query(sql, function (err, result) {
  if (err) throw err;
  console.log("Three table join result:", result);
});

গ্রুপিং এর সাথে যোগ দিন

// JOIN with GROUP BY and aggregation
let sql = `
  SELECT 
    users.name AS customer,
    COUNT(orders.id) AS total_orders,
    SUM(orders.amount) AS total_spent
  FROM users
  LEFT JOIN orders ON users.id = orders.user_id
  GROUP BY users.id, users.name
  ORDER BY total_spent DESC
`;

con.query(sql, function (err, result) {
  if (err) throw err;
  console.log("Customer order summary:", result);
});

সাবকোয়েরির সাথে যোগ দিন

// JOIN with subquery
let sql = `
  SELECT 
    users.name,
    recent_orders.order_count
  FROM users
  LEFT JOIN (
    SELECT user_id, COUNT(*) as order_count
    FROM orders 
    WHERE order_date >= '2023-01-01'
    GROUP BY user_id
  ) recent_orders ON users.id = recent_orders.user_id
`;

con.query(sql, function (err, result) {
  if (err) throw err;
  console.log("Users with recent order counts:", result);
});

সেরা অনুশীলনে যোগ দিন

কর্মক্ষমতা

  • ইনডেক্স কলামে যোগ দিন
  • শুধুমাত্র প্রয়োজনীয় কলাম নির্বাচন করুন
  • জটিল যোগদানের জন্য WHERE বিবৃতি ব্যবহার করুন
  • বড় টেবিলের জন্য LIMIT ব্যবহার করুন

ডেটা অখণ্ডতা

  • বিদেশী মূল সম্পর্ক পরীক্ষা করুন
  • সঠিক JOIN প্রকার নির্বাচন করুন
  • NULL মানগুলি পরিচালনা করুন
  • ডেটা কমিউনিকেশন বুঝুন

কোড গুণমান

  • উপনাম ব্যবহার করে কলামের নাম দ্ব্যর্থহীন করুন
  • জটিল যোগদানের জন্য ডিজাইন
  • পড়ার জন্য প্রশ্ন তৈরি করুন
  • স্ট্যান্ডার্ড কোডিং নিয়মাবলী অনুসরণ করুন

সম্পূর্ণ উদাহরণ

সমস্ত যোগদান কৌশল কভার করার সম্পূর্ণ উদাহরণ:

const mysql = require('mysql');

// Create connection
const con = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "password",
  database: "company_db"
});

// Connect to MySQL
con.connect((err) => {
  if (err) {
    console.error('Error connecting to MySQL:', err.message);
    return;
  }
  
  console.log('Connected to MySQL database');
  
  // Example 1: INNER JOIN
  console.log('\n1. INNER JOIN - Users with favorite products:');
  con.query(`
    SELECT users.name AS user, products.name AS favorite 
    FROM users 
    INNER JOIN products ON users.favorite_product = products.id
  `, (err, result) => {
    if (err) {
      console.error('Error in INNER JOIN:', err.message);
      return;
    }
    console.log(result);
  });
  
  // Example 2: LEFT JOIN
  console.log('\n2. LEFT JOIN - All users with their favorite products:');
  con.query(`
    SELECT users.name AS user, products.name AS favorite 
    FROM users 
    LEFT JOIN products ON users.favorite_product = products.id
  `, (err, result) => {
    if (err) {
      console.error('Error in LEFT JOIN:', err.message);
      return;
    }
    console.log(result);
  });
  
  // Example 3: RIGHT JOIN
  console.log('\n3. RIGHT JOIN - All products with users who favorited them:');
  con.query(`
    SELECT users.name AS user, products.name AS favorite 
    FROM users 
    RIGHT JOIN products ON users.favorite_product = products.id
  `, (err, result) => {
    if (err) {
      console.error('Error in RIGHT JOIN:', err.message);
      return;
    }
    console.log(result);
  });
  
  // Example 4: Multiple table JOIN
  console.log('\n4. Three table JOIN - Users, orders, and products:');
  con.query(`
    SELECT 
      u.name AS customer,
      p.name AS product,
      o.quantity,
      o.order_date
    FROM users u
    INNER JOIN orders o ON u.id = o.user_id
    INNER JOIN products p ON o.product_id = p.id
    ORDER BY o.order_date DESC
    LIMIT 5
  `, (err, result) => {
    if (err) {
      console.error('Error in three table JOIN:', err.message);
      return;
    }
    console.log(result);
    
    // Close connection
    setTimeout(() => {
      con.end((err) => {
        if (err) {
          console.error('Error closing connection:', err.message);
          return;
        }
        console.log('\nConnection closed');
      });
    }, 1000);
  });
});

অনুশীলন করুন

তাদের মধ্যে সংশ্লিষ্ট কলামের উপর ভিত্তি করে দুই বা ততোধিক টেবিল থেকে সারি যোগ করতে ব্যবহৃত সঠিক SQL স্টেটমেন্ট নির্বাচন করুন।

COMBINE
✗ ভুল! "COMBINE" MySQL-এ একটি বৈধ SQL বিবৃতি নয়
MERGE
✗ ভুল! "MERGE" MySQL-এ একটি বৈধ SQL বিবৃতি নয়
JOIN
✓ ঠিক আছে! "JOIN" হল একটি বৈধ SQL স্টেটমেন্ট যা সংশ্লিষ্ট কলামের উপর ভিত্তি করে দুই বা ততোধিক টেবিল থেকে সারি যোগ করতে ব্যবহৃত হয়
LINK
✗ ভুল! MySQL-এ "LINK" একটি বৈধ SQL বিবৃতি নয়